Modeling Workflows as Pipelines
from Domain Modeling Made Functional
あらゆる ワークフロー を モデリング する
目標は、Domain Modeling with Types と同様に、ドメインエキスパート が読めるものつくる
日本語話者には云々 radish-miyazaki.icon
ドメインに日本語を使う
この章では例として、ドメインの文書化 で作成した『注文確定 ワークフロー 』について考える
再掲
code:text
bounded context: Order-Taking
workflow: "Place order" =
input: UnvalidatedOrder
output (on successs):
OrderAcknowledgmentSent
AND OrderPlaced (to send to shipping)
AND BillableOrderPlaced (to send to billing)
output (on error):
ValidationError
// ステップ 1
do ValidateOrder
If order is invalid then:
return with ValidationError
// ステップ 2
do PriceOrder
// ステップ 3
do SendAcknowledgmentToCustomer
// ステップ 4
create and return the events
多くの ビジネスプロセス は、一連のドキュメント変換として考えられる
DMMF では、このビジネスプロセスを パイプライン で表し、それを更に小さな パイプ の集合体として表現する
各パイプでは1 つのものだけを変換する
変換指向プログラミング とも呼ばれる プログラミングスタイル
イメージ図
https://scrapbox.io/files/669cfe57e586c3001d57b1cd.png
もちろん、FP の原則に従って、パイプラインの各ステップはステートレスで副作用がないようにする
各ステップは独立してテスト・理解することができる
ワークフローの入力
状態のモデリング
状態の集合による注文のモデリング
DMMF: ステートマシン
ワークフローのモデリング
型を使ったワークフローの各ステップのモデリング
エフェクトの文書化
ステップからワークフローを合成する
依存関係をパラメータに含めるか
長時間稼働するワークフロー
上記で作成した型は、パブリック API と内部ステップで使用する型とで別ファイルにするのが良い
パブリック API: Domain.fs
入力(データ + コマンド)
出力(イベント + エラー)
ワークフロー関数自身の型
内部ステップ: PlacedOrderWorkflow.fs
各ステップの型定義
#DDD #読書メモ